home *** CD-ROM | disk | FTP | other *** search
/ JCSM Shareware Collection 1996 September / JCSM Shareware Collection (JCS Distribution) (September 1996).ISO / prgtools / disas.zip / LEESMIJ.TXT < prev    next >
Text File  |  1994-05-01  |  20KB  |  501 lines

  1.  
  2.               _______
  3.          ____|__     |               (R)
  4.       --|       |    |-------------------
  5.         |   ____|__  |  Association of
  6.         |  |       |_|  Shareware
  7.         |__|   o   |    Professionals
  8.       -----|   |   |---------------------
  9.            |___|___|    MEMBER
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.      Het programma dat hieronder wordt beschreven is gemaakt door 
  17.      Feico Nater Shareware, 
  18.      Beukweg 24, 
  19.      7556 DE Hengelo.
  20.  
  21.  
  22.      Dit programma wordt beschikbaar gesteld als shareware.  Wat
  23. is shareware?  Het is software dat door de gebruikers gecopieerd
  24. en uitgedeeld mag worden, maar ik, de auteur behoud het auteurs-
  25. recht.  Misschien heeft u het programma voor een laag bedrag
  26. `gekocht' van een bulletin-board en er voor betaald, maar ik
  27. krijg daar geen cent van.  Ik verwacht dat u mij rechtstreeks
  28. betaalt, want ik verdien mijn levensonderhoud met het maken van
  29. shareware.
  30.      Dus, als dit programma u bevalt en u besluit het te gebrui-
  31. ken, dan wordt van u verwacht dat u een bedrag van 69 gulden
  32. (inclusief BTW) overmaakt op mijn rekening bij de Postbank,
  33. nummer 96541.  Helaas kan ik geen kredietkaarten accepteren.
  34.      Waarom zou u registreren?  Het kost u natuurlijk geld.  Maar
  35. ik zal u op de hoogte houden van verdere ontwikkelingen en u
  36. krijgt het recht om nieuwere versies te bestellen voor de prijs
  37. van porto en floppy.  Tenslotte zal ik bereid zijn om naar uw
  38. verlangens te luisteren.
  39.      En als het programma u niet bevalt?  Dan kan u het weggooi-
  40. en.  Maar ongetwijfeld zal het idee van shareware u bevallen,
  41. omdat u niet veel geld hoeft te betalen voor iets dat achteraf
  42. toch tegenvalt.
  43.      Maar of u nu registreert of niet, u wordt aangemoedigd dit
  44. systeem verder rond te delen.  Geef copieën aan uw vrienden.  De
  45. copieën die u ronddeelt moeten volledig en ongewijzigd zijn, maar
  46. gebruik van file-compressie is toegestaan.  U mag alleen een
  47. maximum van tien gulden vragen voor de floppy, verpakking en
  48. verzending.
  49.  
  50.  
  51.  Over de auteur
  52.  
  53.      Ik werk met computers sedert 1970.  Ik heb een HBO-studie
  54. in informatica voltooid.  Daarna heb ik vele jaren gewerkt in de
  55. defensie-industrie, en mijn collega's beschouwden mij als de
  56. bekwaamste programmeur onder hen.  Maar dank zij Gorbatsjov (wat
  57. ik hem niet kwalijk kan nemen) ging het slechter met de defensie-
  58. industrie.  Sindsdien werk ik als shareware-auteur.
  59.  
  60. *******************************
  61. *       D I S A S T E R       *
  62. *******************************
  63.  
  64.   Disaster is een interactieve disassembler voor de IBM-PC.
  65.  
  66.   Een disassembler is niets bijzonders.  Het programma DEBUG
  67. wordt bij MSDOS geleverd en bevat een disassembler.  Maar DEBUG
  68. kent alleen de instructies van de 8086 en 8088.  Verder levert
  69. DEBUG geen coding die geschikt is om weer als input voor een
  70. assembler te dienen.
  71.  
  72.   Geen enkele disassembler maakt met één druk op de knop een
  73. keurig assemblerprogramma.  In tegendeel, het disassembleren van
  74. een beetje programma is vele dagen werk.
  75.  
  76.   De eenvoudigst denkbare disassembler werkt rechttoe-rechtaan. 
  77. Hij leest het machinetaalprogramma van voor tot achter en
  78. vertaalt alles naar assembler-taal, ongeacht of het code of data
  79. is.  
  80.  
  81.   Disaster werkt interactief.  U kan het machinetaalprogramma op
  82. uw gemak bekijken, labels en commentaar toevoegen, aangeven wat
  83. code en wat data is.  Het resultaat kan worden opgeborgen om de
  84. volgende dag verder te kunnen gaan.  Tenslotte maakt DISASTER een
  85. correct assemblerprogramma.
  86.  
  87.   Deze gebruiksaanwijzing is heel kort.  Er is niet meer uit te
  88. leggen.  Kennis van de PC en de assembleertaal wordt echter
  89. bekend verondersteld.
  90.  
  91.  
  92. SAMENVATTING VAN COMMANDO'S (in plaats van een adres is altijd
  93. een label toegestaan)
  94. ; adres,commentaar         geef commentaar op
  95. ; adres,-                  verwijder commentaar
  96. A adres,adres                   automatische generatie van labels
  97. B adres,adres              automatische generatie van controls 
  98.                            en labels
  99. C adres,letter             control code of data
  100. C adres,-                  verwijder control
  101. F ????                     zoek woord
  102. L adres,label              geef een label op
  103. L adres,-                  verwijder een label
  104. L oude-naam,nieuwe-naam    vervang een label
  105. Q                          stop, of sluit uitvoerfile
  106. R prognaam                 lees een programma in
  107. S                          schrijf een script-file
  108. U adres,adres              disassembleer
  109. W                         maak output-file
  110.   DEMONSTRATIE
  111.  
  112.  
  113.   U start DISASTER de eerste keer met het commando:
  114.           DISASTER
  115.   Er komt nu een foutmelding die u mag negeren.  Op het scherm
  116. verschijnt de prompt --> om aan te geven dat DISASTER uw
  117. commando's verwacht.
  118.  
  119.   Vervolgens leest u een programma in met het commando:
  120.           R naam.EXE          
  121. of:
  122.           R naam.COM
  123. of:
  124.           R naam.SYS
  125.  
  126.   Wil u iets disassembleren wat reeds in het geheugen staat, dan
  127. is het commando:
  128.           R segmentadres.ROM
  129.  
  130.   Nu moet u eerst aangeven dat uw programma als instructiecode
  131. moet worden gedisassembleerd met het commando (precies zo):
  132.           C Lstartlocation,I
  133.  
  134.   Nu begint het disassembleren!  Geef het commando:
  135.           U Lstartlocation
  136. wat resulteert in een stukje gedisassembleerd programma op het
  137. scherm.  Links verschijnen de adressen, daarnaast de mnemonische
  138. code, en rechts (in kleur) de oorspronkelijke machinetaal.  Een
  139. groen blokje betekent dat er geen geldige opcode werd gevonden. 
  140. Voorvoegsels komen in geel, opcodes in groen, modrm-bytes en sib-
  141. bytes in rood, operanden in blauw.
  142.  
  143.   Varianten op het U-commando zijn:
  144.           U adres               disassembleer 20 regels vanaf adres
  145.           U adres,adres    disassembleer van .. tot ..
  146.           U                          disassembleer volgende 20 regels
  147.           <return>         idem
  148.  
  149.   Adressen in commando's worden altijd hexadecimaal opgegeven. 
  150. In plaats van adressen kan u ook labels (zie hierna) opgeven.
  151.  
  152.  
  153.   HULP
  154.   Hulpteksten verschijnen met de toetsen F5 tot en met F10.  Een
  155. willekeurige toets verwijdert de tekst weer.
  156.   Druk liever niet op de hulptoetsen terwijl DISASTER met een
  157. opdracht bezig is, het heeft enigszins vreemde (geen ernstige)
  158. gevolgen.
  159.   F1 en F3 kunnen, net als in COMMAND.COM, worden gebruikt om
  160. commando's te herhalen, en de toetsen Insert, Delete en Backspace
  161. werken normaal.   LABELS
  162.  
  163.  
  164.   Alle adressen komen hexadecimaal op het scherm.  Natuurlijk wil
  165. u labels zien.  Dat kan met het commando:
  166.           L adres,label
  167.  
  168.   Een label moet, zoals gebruikelijk, met een letter beginnen. 
  169. Verder moet minstens een keer de letter G tot en met Z er in
  170. voorkomen.  De maximale lengte van een label is veertien tekens. 
  171.  
  172.   Komt in een label geen van de letters G tot en met Z voor, dan
  173. beschouwt DISASTER het als een hexadecimaal adres.
  174.  
  175.   Wees voorzichtig met het gebruik van labels die met de letter
  176. L beginnen.  De functie die automatisch controls genereert
  177. veronderstelt namelijk dat zo'n label bij instructiecode staat.
  178.  
  179.   Labels kunnen worden gebruikt in commando's.  Het U commando
  180. wordt dan bijvoorbeeld: U label,label.  
  181.  
  182.   Labels kunnen worden verwijderd met het commando:
  183.           L label,-
  184. of, wat op het zelfde neerkomt:
  185.           L adres,-        
  186.  
  187.   Labels kunnen van naam worden veranderd met het commando:
  188.           L oude naam,nieuwe naam
  189.  
  190.   Het is niet mogelijk twee labels op het zelfde adres te
  191. definiëren.
  192.  
  193.   Het maximale aantal labels is 4090.
  194.  
  195.  
  196.   INITIEEL GEGENEREERDE LABELS
  197.  
  198.   Als u een file inleest, dan genereert Disaster automatisch een
  199. aantal labels in de header van de file.  De meeste van deze
  200. labels beginnen met de letter Z.  Er komt ook een label et de
  201. naam LSTARTLOCATION, en dat is het adres waar de executie begint.   CONTROLs
  202.  
  203.  
  204.   Niet alles wat u ziet is instructiecode.  Er is ook data.  De
  205. disassembler kan echter het verschil niet zien.  Bovendien
  206. bestaat er code en data in soorten.  U moet zelf aangeven wat
  207. code en wat data is en welke soort het is.  Dat gaat door
  208. controls te zetten met het commando:
  209.           C adres,letter(s)
  210. of, wat op het zelfde neerkomt:
  211.           C label,letter(s)
  212.  
  213.   Een control kan worden verwijderd met:
  214.           C adres,-
  215. of:
  216.           C label,-
  217.  
  218.   Vanaf het aangegeven adres wordt gedisassembleerd volgens de
  219. letter.
  220.  
  221.   Die letter kan zijn:
  222.           B hexadecimale bytes
  223.           T tekst tussen quotes, voor zover mogelijk
  224.           W hexadecimale woorden
  225.           I instructiecode voor Intel chips
  226.           IV instructiecode voor NEC V20 of V30
  227.           IA instructiecode voor 80386 in protected mode met een
  228. operand- en adreslengte van 32 bits.
  229.  
  230.   B, T en W zijn data-controls, de overige zijn code-controls. 
  231. Dit is een belangrijk onderscheid voor de verderop besproken A-
  232. en B-commando's.  
  233.   De controls delen uw programma in stukken.  Er zijn datastukken
  234. en codestukken.
  235.  
  236.   Als DISASTER een opcode tegenkomt die geldig is op NEC-chips
  237. maar niet op Intel-chips, of andersom, dan wordt die gewoon
  238. gedisassembleerd.  Of I of IV werd opgegeven is dan niet van
  239. belang.  Maar er zijn opcodes die bij NEC en Intel iets anders
  240. betekenen.  In dat geval beslist I of IV.  Programma's waarbij
  241. het onderscheid tussen I en IV belangrijk is zijn overigens
  242. zeldzaam.
  243.  
  244.   IA kan alleen worden gebruikt bij programma's die op de 80386
  245. in protected mode draaien.  In real mode geldt immers altijd een
  246. default-adres- en -operand-lengte van 16 bits.
  247.  
  248.   Het maximale aantal controls is 16380.
  249.   INITIEEL OPGEVOERDE CONTROLS
  250.  
  251.   Leest u een file in, dan worden automatisch wat controls bij
  252. de velden van de header gezet.  
  253.   In het grootste deel van uw programma geldt een T-control.  Dat
  254. mag vreemd lijken, maar het is gedaan omdat nog niet bekend is
  255. waar de overige controls moeten staan, en de T-control maakt het
  256. herkennen van leesbare tekst gemakkelijk.
  257.   AUTOMATISCH GENEREREN VAN LABELS
  258.  
  259.   Het handmatig plaatsen van de labels en controls is een enorm
  260. karwei.  Daarom is dit werk in DISASTER gedeeltelijk
  261. geautomatiseerd.
  262.  
  263.   Labels worden automatisch gegenereerd met het commando:
  264.           A adres,adres
  265.   
  266.   DISASTER doorzoekt nu uw programma, en geeft tegelijk een
  267. listing op het scherm.  Alleen de codestukken worden onderzocht,
  268. datastukken worden overgeslagen.  Elke keer als DISASTER een
  269. adresverwijzing tegenkomt wordt hiervoor een label opgevoerd.
  270.   Zo'n opgevoerd label heeft de vorm: L45A3_27E5.
  271.   De eerste letter van het opgevoerde label geeft het soort
  272. verwijzing aan:
  273.           L spronginstructie
  274.           W woorddata
  275.           T bytedata
  276.  
  277.   Na die eerste letter komt het hexadecimale adres waar het label
  278. naar verwijst, want het kind moet een naam hebben.  Daarna een
  279. onderstreping, en ten slotte het adres waar de verwijzing voor
  280. het eerst werd aangetroffen.  Dat laatste vergemakkelijkt het
  281. onderzoek van het programma. 
  282.  
  283.   Elke keer als een label wordt opgevoerd toont DISASTER een
  284. blokje op het scherm.  Zo'n blokje komt dus te staan bij iedere
  285. JMP- en CALL-instructie en bij iedere geheugenverwijzing waar nog
  286. geen label aanwezig is.
  287.   AUTOMATISCH GENEREREN VAN CONTROLS
  288.  
  289.   Controls worden automatisch gegenereerd met het commando
  290.           B adres,adres
  291.  
  292.   DISASTER doorzoekt nu de labels van uw programma.  Elke keer
  293. als DISASTER in een datastuk een label tegenkomt dat met een L
  294. begint wordt hier een control I opgevoerd, zodat de verdere
  295. programmatekst als instructiecode wordt geïnterpreteerd.  Bij de
  296. eerstvolgende onvoorwaardelijke RET- of JMP-instructie wordt een
  297. control opgevoerd om de oorspronkelijke toestand te herstellen.
  298.  
  299.   Elke keer als een control wordt opgevoerd toont DISASTER een
  300. blokje op het scherm.  Zo'n blokje komt dus:
  301.   1 bij een label dat met een L begint en dat in een datagebied
  302. stond.
  303.   2 bij de eerste RET- of JMP-instructie daarna.
  304.  
  305.   Elke keer als een control I wordt opgevoerd, wordt bovendien
  306. het betreffende stuk doorzocht naar adresverwijzingen, waar dan
  307. (zoals in het vorige hoofdstuk stond) labels voor worden
  308. gegenereerd.
  309.  
  310.  
  311. GEBRUIK VAN DE MUIS
  312.  
  313.   U wil misschien een label of control opvoeren, maar u weet het
  314. precieze adres niet.  Bijvoorbeeld, de disassembly bevat de
  315. regel:
  316. 0357   DB 'Press any key',0,'Invalid command'
  317.   Er moet een label achter de letter I.  Type nu L, neem de muis
  318. en klik met de linker knop op de letter I.  Het gewenste adres
  319. verschijnt op de commandoregel, net alsof u het zelf intypte. 
  320. Maak het commando verder af.
  321.   Klikt u met de linker knop ergens op de disassembly, dan
  322. verschijnt het adres van het punt waar u klikte op de
  323. commandoregel.  Klikt u met de rechter knop, dan verschijnt het
  324. getal of label op de commandoregel.
  325.   De linker knop werkt niet goed als er een regelomhaal op het
  326. scherm is gekomen.
  327.   AANWIJZINGEN
  328.  
  329.    Meestal begint een disassembly aldus:
  330.  
  331.   C:\disaster              Start DISASTER 
  332.   --->Rprogr.com           lees het programma
  333.   --->B100,ffff            genereer labels en controls
  334.   --->B100,ffff
  335.   --->B100,ffff
  336.   --->B100,ffff
  337.  
  338.   Op het scherm ziet u hoe steeds meer labels worden geplaatst
  339. en hoe steeds meer code-controls worden gezet.
  340.  
  341.   Het commando B100,ffff kan eenvoudig worden herhaald met de F3-
  342. toets.  Herhaal het tot DISASTER meldt dat er niet meer labels
  343. en controls zijn toegvoegd.
  344.  
  345.   Als het een beetje wil is de disassembly hiermee al haast
  346. voltooid, en u hoeft er niets voor te doen!  Kom daar eens om bij
  347. een andere disassembler.
  348.  
  349.   Kan er dan niets foutgaan?  Helaas, niets is volmaakt,
  350. bijvoorbeeld in de volgende gevallen:
  351. 0150      JNZ L0123
  352. 0152      JZ  L0156
  353. 0154      ADD B[BX+SI],AL
  354.   Het B-commando denkt dat de laatste instructie code is, want
  355. er staat geen onvoorwaardelijke sprongopdracht voor.  Maar JNZ
  356. en JZ zijn samen onvoorwaardelijk.  De coding vanaf adres 0154
  357. zal dus als instructiecode worden beschouwd.  Komen hier dingen
  358. voor die lijken op instrcties met adresverwijzingen, dan worden
  359. er valse labels gegenereerd.
  360.   Als u oplet tijdens de uitvoering van het B-commando, dan zal
  361. u dit onheil wel opmerken.  Onderbreek het commando met een
  362. willekeurige toets, blader met het U-commando door het programma
  363. om de juiste plek te vinden en zet op adres 0154 een data-
  364. control.
  365.  
  366.           INT 020
  367.   Dit is het einde van het programma, wat trouwens ook geldt voot
  368. INT 021 met AH=00 of 04C.  Het B-commando herkent dit niet.  U
  369. moet zelf hierachter een data-control zetten.
  370.  
  371.           JMP [08170+BX]
  372.   Dit is een sprong via een tabel van sprongadressen. Dit wordt
  373. door DISASTER niet herkend.  U moet zelf labels toekennen aan de
  374. adressen in de tabel.  Gebruikt u labels die met een L beginnen,
  375. dan zal het B-commando de gelabelde tekst als code beschouwen. 
  376.   COMMENTAAR
  377.  
  378.   U kan commentaar toevoegen met het commando:
  379.           ;adres,tekst
  380. en natuurlijk ook met
  381.           ;label,tekst
  382.  
  383.   Let op de kommapunt die dit commando inluidt!
  384.  
  385.   Commentaar kan worden verwijderd met:
  386.           ;adres,-
  387. of:
  388.           ;label,-
  389.  
  390.   Commentaar wordt getoond voorafgaand aan het genoemde adres. 
  391. In een data-gedeelte veroorzaakt het commentaar een nieuwe regel. 
  392. Een commentaar middenin een instructie of midden in een woord-
  393. constante wordt genegeerd.
  394.  
  395.   De backslash \ heeft een speciale betekenis: hij levert een
  396. nieuwe regel op, zodat een commentaar meerdere regels kan
  397. omvatten.  Twee backslashes aan het begin van een commentaar
  398. geven een nieuwe pagina.
  399.  
  400.           ;adres,commentaar van een regel
  401.           ;adres,\een regel met een lege regel ervoor
  402.           ;adres,\\eerste regel op een pagina\volgende regel
  403.  
  404.  
  405.   De maximale lengte van een commentaarregel is 127 bytes.
  406.  
  407.   Er kunnen geen twee commentaarregels op een adres staan.
  408.  
  409.   De maximale hoeveelheid commentaar is ongeveer 62500 bytes,
  410. plus wat overhead.
  411.  
  412.   Verder zal u, natuurlijk, de gegenereerde labels vervangen door
  413. namen die duidelijk aangeven wat er gebeurt.   OPTIES
  414.  
  415.   Sommige instellingen van de disassembler kunnen veranderd
  416. worden.  Een optie kan worden aangezet met de letter O, gevolgd
  417. door de letter die de optie aangeeft.  Een optie kan worden
  418. uitgezet met de letter O, de letter die de optie aangeeft, een
  419. komma en een streepje.  De volgende opties zijn beschikbaar. 
  420. OP        geheugenverwijzing voorafgegaan door B, W of D
  421. OP,-      geheugenverwijzing voorafgegaan door BYTE PTR or
  422.           (D)WORD PTR 
  423. OL        code labels op een aparte regel
  424. OL,-      labels en code op dezelfde regel
  425. OA        adresses naar file en scherm
  426. OA,-      adressen alleen naar het scherm
  427. OH        hexadecimale waarden worden voorafgegaan door een nul
  428.           als het eerste cijfer anders A-F zou zijn, en ze worden
  429.           gevolgd door de letter h.
  430. OH,-      hexadecimale waarden worden altijd voorafgegaan door
  431.           een nul en niet gevolgd door een h.
  432. OO        impliciete operanden na XLAT, MOVS, OUTS, SCAS en
  433.           dergelijke instructies worden altijd gegenereerd.
  434. OO,-      impliciete operanden worden alleen gegenereerd als
  435.           er een segment override is.
  436.  
  437. Druk op F10 om de huidige instelling van de opties te zien.
  438.  
  439.   MAKEN VAN EEN SOURCE-FILE
  440.  
  441.  
  442.   Het uiteindelijke doel van disassembleren is dat er een source-
  443. file ontstaat.  Deze source-file kan met een assembler weer
  444. geassembleerd worden.  De source-file wordt geopend met het
  445. commando
  446.           W
  447.   De source-file heeft de zelfde naam als de .SYS-, .EXE- of
  448. .COM-file, doch met de extensie .8.
  449.  
  450.   Zolang de source-file open is is de prompt >>>.  Alleen de
  451. commando's O, U en Q zijn nu toegestaan.
  452.  
  453.   Na het commando W geeft u een of meer U-commando's.  Op het
  454. scherm komen nu alleen nog maar de adressen, de gedisassembleerde
  455. tekst gaat naar de file.  
  456.  
  457.   Tenslotte sluit u de file met het commando
  458.           Q
  459. Nu verschijnt weer de prompt -->.
  460.  
  461.   Wellicht verwacht u dat u, door de source-file weer te
  462. assembleren, weer de zelfde .COM- of .EXE-file terugkrijgt.  In
  463. de praktijk zal dat tegenvallen, omdat meerdere machine-
  464. instructies de zelfde functie hebben.  Bijvoorbeeld:
  465.   MOV AX,BX                8BC3 of 89D8
  466.   REP MOVSB                F3A4 of F2A4
  467.   ADD BX,5                 83C305 of 81C30500
  468.   JMP $+8                  EB06 of E90500
  469.  
  470.   Verder zijn er instructies denkbaar die voor de processor niet
  471. uitvoerbaar zijn, zoals SHL AL,30 of BOUND AX,BX.  DISASTER
  472. accepteert zulke instructies, de assembler zal ze misschien
  473. weigeren.   STOPPEN EN VERDERGAAN
  474.  
  475.  
  476.   U heeft na vele uren werk uw programma uitgebreid met Labels
  477. en Controls.  Om de volgende dag verder te kunnen gaan geeft u
  478. het commando:
  479.           S
  480.   Er wordt nu een zogenaamde scriptfile gemaakt.  Deze heeft de
  481. extensie .SCR en, als u geen andere naam opgaf, dezelfde naam als
  482. uw programma.
  483.  
  484.   Bestaat de scriptfile al, dan vraagt DISASTER om bevestiging.
  485.  
  486.   Tenslotte stopt u met het commando:
  487.           Q
  488.   Is er nog geen scriptfile gemaakt  , dan vraagt DISASTER om
  489. bevestiging.
  490.  
  491.   Om verder te gaan start u de disassembler met het commando
  492.           DISASTER filenaam
  493. waarbij u de naam van de scriptfile opgeeft.  DISASTER onderzoekt
  494. namelijk eerst of de opgegeven filenaam een scriptfile is.  Is
  495. dat niet het geval, dan zoekt DISASTER een .COM- of .EXE-file.
  496.  
  497.   Een scriptfile is een ASCII-file en bevat gewone commando's
  498. voor de disassembler.  Niets verbiedt u de scriptfile met een
  499. teksteditor te bewerken.
  500.  
  501.